package com.notary.seal;

import com.alibaba.fastjson.JSONObject;
import com.notary.data.request.SignContractRequestDTO;
import com.notary.data.request.SignerRequestDTO;
import com.notary.entity.po.DepositDTO;
import com.notary.entity.po.GzcRegisterDTO;
import com.notary.entity.vo.JsonResult;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
 * 盖章接口
 *
 * @author Administrator
 */
public interface SealRequestService {


    /**
     * 获取接口token凭证
     *
     * @return
     */
    public String getDzqToken();


    /**
     * 企业开通签章接口
     *
     * @return
     */
    public JsonResult firmRegister(FirmRegisterRequest registerRequest);


    /**
     * 个人开通签名接口
     *
     * @return
     */
    public JsonResult personalRegister(PersonalRegisterRequest personalRegisterRequest);


    /**
     * 创文件签约上传文件
     *
     * @param file
     * @return
     */
    public JsonResult contractApply(File file);

    /**
     * 下载公证书
     *
     * @param contractNo
     * @return
     */
    public InputStream downloadNotaryByNo(String contractNo);

    /**
     * 文件自动签约
     *
     * @param contractNo
     * @param template
     * @return
     */
    public JsonResult fileContractPrimary(String contractNo, String template);


    /**
     * 申请执行公证处审核
     *
     * @param notaryNo 卷宗号（必须）
     * @param status   执行状态（必选）1-律师审核, 2-公证处审核, 3-通过, 4-驳回
     * @param reason   驳回原因（可选）
     */
    public JsonResult officeAudit(String notaryNo, String status, String reason);

    /**
     * 发起文件签约
     *
     * @param signContractRequestDTO
     */
    public JsonResult signContract(SignContractRequestDTO signContractRequestDTO);

    /**
     * 个人开通签名
     *
     * @param signerRequestDTO
     */
    public JsonResult createSigner(SignerRequestDTO signerRequestDTO);

    /**
     * 更新公证系统文件
     *
     * @param notaryNo：卷宗号（必须）
     * @param type             类型（必选）0-核实函，1-执行证书, 2-公证书
     * @param file             文件路径 比如：https://xxx.com
     */
    public JsonResult updateCertificateFile(String notaryNo, String type, String file);

    /**
     * 公证处注册
     *
     * @param gzcRegisterDTO
     * @return
     */
    public JsonResult notaryRegister(GzcRegisterDTO gzcRegisterDTO);

    /**
     * 公证处认证
     *
     * @param unionid
     * @param callBackUrl
     * @return
     */
    public JsonResult attestation(String unionid, String callBackUrl);

    /**
     * 存证校验
     *
     * @param file
     * @param hashCode
     * @return
     */
    public JsonResult verify(MultipartFile file, String hashCode, String originalHash);

    /**
     * 存证下载
     *
     * @param file
     * @param hashCode
     * @return
     */
    public InputStream download(MultipartFile file, String hashCode, String password);

    /**
     * 获取存证管理列表数据
     *
     * @return
     */
    public JsonResult getDepositList(Integer pageNum, Integer pageSize, DepositDTO depositDTO);
}
